//package com.inspur.edp.cef.generator.coreGenerator.base.serializer;
//
//import com.inspur.edp.caf.generator.field.FieldGenerator;
//import com.inspur.edp.caf.generator.item.ClassGenerator;
//import com.inspur.edp.caf.generator.item.ClassGeneratorContext;
//import com.inspur.edp.caf.generator.method.ClassMethodGenerator;
//import com.inspur.edp.cef.designtime.api.IFieldCollection;
//import com.inspur.edp.cef.designtime.api.IGspCommonField;
//import com.inspur.edp.cef.designtime.api.element.GspAssociation;
//import com.inspur.edp.cef.designtime.api.element.GspElementObjectType;
//import com.inspur.edp.cef.generator.coreGenerator.base.entityGenerator.CefDataTypeImplGeneratorContext;
//import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
//
//public class DataTypeSerializerGenerator extends ClassGenerator {
//  protected CefDataTypeImplGeneratorContext dataTypeGenCtx;
//
//  public DataTypeSerializerGenerator(CefDataTypeImplGeneratorContext dataTypeGenCtx) {
//    super(dataTypeGenCtx.coreGenContext.getCompilationUnitInfo());
//    this.dataTypeGenCtx = dataTypeGenCtx;
//  }
//
//  @Override
//  protected ClassGeneratorContext createClassInfoContext() {
//    return new DataTypeSerGenContext(dataTypeGenCtx);
//  }
//
//  @Override
//  protected java.util.ArrayList<ModifierKeyword> getAccessModifier() {
//    return new java.util.ArrayList<ModifierKeyword>(
//        java.util.Arrays.asList(new ModifierKeyword[] {ModifierKeyword.PUBLIC_KEYWORD}));
//  }
//
//  @Override
//  protected String getName() {
//    return String.format("%1$sSerItem", dataTypeGenCtx.dataType.getCode());
//  }
//
//  @Override
//  protected java.util.ArrayList<FieldGenerator> createFieldGenerator() {
//    java.util.ArrayList<FieldGenerator> rez = new java.util.ArrayList<FieldGenerator>();
//    for (IGspCommonField item : dataTypeGenCtx.dataType.getContainElements()) {
//      if (item.getObjectType() == GspElementObjectType.DynamicProp
//          && item.getDynamicPropSetInfo().getDynamicPropSerializerComp() != null) {
//        rez.add(
//            new DynamicSerItemsFieldGenerator(
//                item, dataTypeGenCtx.coreGenContext.getCefGenContext()));
//      }
//    }
//    return rez;
//  }
//
//  @Override
//  protected java.util.ArrayList<ClassMethodGenerator> createMethodGenerators() {
//    java.util.ArrayList<ClassMethodGenerator> list =
//        new java.util.ArrayList<ClassMethodGenerator>();
//    createReadAssociationGenerators(list, dataTypeGenCtx.dataType.getContainElements());
//    createWriteAssociationGenerators(list, dataTypeGenCtx.dataType.getContainElements());
//    return list;
//  }
//
////region ReadAsso
//  private void createReadAssociationGenerators(
//      java.util.ArrayList<ClassMethodGenerator> list, IFieldCollection elementCollection) {
//    for (IGspCommonField item : elementCollection) {
//      if (isAssociation(item)) {
//        // if (item.getIsRefElement())
//        //    throw new Exception(item.getBelongObject().getCode()+"暂不支持关联字段中带出关联字段" +
//        // item.getLabelID());
//        createReadRefAssociationGenerator(item, list);
//        ReadAssociationGenerator generator = new ReadAssociationGenerator(item, dataTypeGenCtx);
//        list.add(generator);
//      }
//    }
//  }
//
//  private void createReadRefAssociationGenerator(
//      IGspCommonField element, java.util.ArrayList<ClassMethodGenerator> list) {

//    for (GspAssociation association : element.getChildAssociations()) {
//      createReadAssociationGenerators(list, association.getRefElementCollection());
//    }
//  }
//
//  //endregion
//
//
//  //region WriteAsso
//  private void createWriteAssociationGenerators(
//      java.util.ArrayList<ClassMethodGenerator> list, IFieldCollection elementCollection) {

//    for (IGspCommonField item : elementCollection) {
//      if (isAssociation(item)) {
//        createWriteRefAssociationGenerator(item, list);
//        list.add(getWriteAssociationGenerator(item));
//      }
//    }
//  }
//
//  protected WriteAssociationGenerator getWriteAssociationGenerator(IGspCommonField item) {
//    return new WriteAssociationGenerator(item, dataTypeGenCtx);
//  }
//
//  private boolean isAssociation(IGspCommonField item) {
//    return !item.getIsUdt() && item.getObjectType() == GspElementObjectType.Association;
//  }
//
//  private void createWriteRefAssociationGenerator(
//      IGspCommonField element, java.util.ArrayList<ClassMethodGenerator> list) {
//    for (GspAssociation association : element.getChildAssociations()) {
//      for (IGspCommonField item : association.getRefElementCollection()) {
//        if (isAssociation(item)) {
//
//          list.add(new WriteAssociationGenerator(item, dataTypeGenCtx));
//        }
//      }
//    }
//  }
//
//  //endregion
//}
